package com.sram.controller.common;

import java.util.Date;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class AspectController implements HandlerInterceptor  {
	  static final String LOGIN_URL="/common/sessionrun.jsp";

	//该方法将在整个请求完成之后，也就是DispatcherServlet渲染了视图执行(preHandle方法返回值为true的时候才会执行)
	//	在afterCompletion中，可以根据ex是否为null判断是否发生了异常，进行日志记录。
	@Override
	public void afterCompletion(HttpServletRequest arg0,
			HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
	}
	//该方法在Controller的方法调用之后执行(preHandle方法返回值为true的时候才会执行)
	//	在postHandle中，有机会修改ModelAndView；
	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
			Object arg2, ModelAndView arg3) throws Exception {
	}
	//该方法在Controller方法调用之前执行
	//	在preHandle中，可以进行编码、安全控制等处理；
	@Override
	public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1,
			Object arg2) throws Exception {
		HttpSession session = arg0.getSession();
		System.out.printf("拦截器");
		//先判断是否是webservice
		HttpSession s = arg0.getSession();
		String url =arg0.getRequestURI().toString();//具体操作url
		if(url.contains("webService")){
			return true;
		}else if(url.contains("fromWX")){
			return true;
		}else{
			//判断session是否失效
			if(session.getAttribute("userId") == null){
				if (arg0.getHeader("x-requested-with") != null && arg0.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){ //如果是ajax请求响应头会有，x-requested-with
					arg1.setHeader("sessionstatus", "timeout");//在响应头设置session状态
					arg1.getWriter().write("sessionTimeout");
					arg1.getWriter().flush();
				}else{
					System.out.printf("session失效  重新denglu");
					//	第一种抛出异常，mvc.xml定义异常跳转的界面
					throw new SessionTimeoutException();
//			arg1.sendRedirect(arg0.getSession().getServletContext().getContextPath()+LOGIN_URL);
//			return false;
				}
				return false;
			}
		}

		//添加日志等功能
		return true;
	}

}